package com.liru.chat_demo.model;

import java.time.LocalDateTime;
import java.util.Objects;
import java.util.UUID;

/**
 * 表示MCP服务器的模型类
 */
public class McpServer {
    // 服务器唯一标识符
    private String id;
    // 服务器名称
    private String name;
    // 服务器基础URL
    private String baseUrl;
    // SSE端点地址
    private String sseEndpoint;
    // 服务器是否启用
    private boolean enabled;
    // 最后一次连接时间
    private LocalDateTime lastSeen;

    // 无参构造函数，自动生成ID和最后连接时间
    public McpServer() {
        this.id = UUID.randomUUID().toString();
        this.lastSeen = LocalDateTime.now();
    }

    // 带参数的构造函数，用于创建具有指定属性的服务器实例
    public McpServer(String name, String baseUrl, String sseEndpoint, boolean enabled) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
        this.baseUrl = baseUrl;
        this.sseEndpoint = sseEndpoint;
        this.enabled = enabled;
        this.lastSeen = LocalDateTime.now();
    }

    // 获取服务器ID
    public String getId() {
        return id;
    }

    // 设置服务器ID
    public void setId(String id) {
        this.id = id;
    }

    // 获取服务器名称
    public String getName() {
        return name;
    }

    // 设置服务器名称
    public void setName(String name) {
        this.name = name;
    }

    // 获取服务器基础URL
    public String getBaseUrl() {
        return baseUrl;
    }

    // 设置服务器基础URL
    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    // 获取SSE端点地址
    public String getSseEndpoint() {
        return sseEndpoint;
    }

    // 设置SSE端点地址
    public void setSseEndpoint(String sseEndpoint) {
        this.sseEndpoint = sseEndpoint;
    }

    // 检查服务器是否启用
    public boolean isEnabled() {
        return enabled;
    }

    // 设置服务器启用状态
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    // 获取最后连接时间
    public LocalDateTime getLastSeen() {
        return lastSeen;
    }

    // 设置最后连接时间
    public void setLastSeen(LocalDateTime lastSeen) {
        this.lastSeen = lastSeen;
    }

    // 更新最后连接时间为当前时间
    public void updateLastSeen() {
        this.lastSeen = LocalDateTime.now();
    }

    // 比较两个McpServer对象是否相等，基于ID判断
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        McpServer mcpServer = (McpServer) o;
        return Objects.equals(id, mcpServer.id);
    }

    // 根据ID生成哈希码
    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    // 返回McpServer对象的字符串表示
    @Override
    public String toString() {
        return "McpServer{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", baseUrl='" + baseUrl + '\'' +
                ", sseEndpoint='" + sseEndpoint + '\'' +
                ", enabled=" + enabled +
                ", lastSeen=" + lastSeen +
                '}';
    }
}